package com.compose.universally

import androidx.compose.runtime.Composable

typealias BuilderComposable = @Composable () -> Unit

typealias BuilderComposableT<T> = @Composable T.() -> Unit

typealias BuilderComposableV<V> = @Composable (V) -> Unit

typealias BuilderComposableTV<T, V> = @Composable T.(V) -> Unit

// ******** Callback Zero ******** ///
// Callback Zero
typealias Callback = () -> Unit

// Callback Zero
typealias CallbackV<V> = (V) -> Unit

// Future Callback Zero
typealias CallbackFuture = suspend () -> Unit

// Future Callback Zero
typealias CallbackFutureT<T> = suspend () -> T

// ******** Callback One ******** ///
// Callback One
typealias ValueCallbackT<T> = (T) -> T

// Callback One
typealias ValueCallback<V> = (V) -> Unit

// Callback One
typealias ValueCallbackTV<T, V> = (V) -> T

// Future Callback One
typealias ValueCallbackFuture<V> = suspend (V) -> Unit

// Future Callback One
typealias ValueCallbackFutureT<T> = suspend (T) -> T

// Future Callback One
typealias ValueCallbackFutureTV<T, V> = suspend (V) -> T

// ******** Callback Two ******** ///
// Callback Two
typealias ValueTwoCallback<V1, V2> = (V1, V2) -> Unit

// Future Callback Two
typealias ValueTwoCallbackT<T, V1, V2> = (V1, V2) -> T

// Callback Two T
typealias ValueTwoCallbackFuture<V1, V2> = suspend (V1, V2) -> Unit

// Future Callback Two T
typealias ValueTwoCallbackFutureT<T, V1, V2> = suspend (V1, V2) -> T

// ******** Callback Three ******** ///
// Callback Three
typealias ValueThreeCallback<V1, V2, V3> = (V1, V2, V3) -> Unit

// Callback Three T
typealias ValueThreeCallbackT<T, V1, V2, V3> = (V1, V2, V3) -> T

// Future Callback Three
typealias ValueThreeCallbackFuture<V1, V2, V3> = suspend (V1, V2, V3) -> Unit

// Future Callback Three T
typealias ValueThreeCallbackFutureT<T, V1, V2, V3> = suspend (V1, V2, V3) -> T

// ******** Callback Four ******** ///
// Callback Four
typealias ValueFourCallback<V1, V2, V3, V4> = (V1, V2, V3, V4) -> Unit

// Callback Four T
typealias ValueFourCallbackT<T, V1, V2, V3, V4> = (V1, V2, V3, V4) -> T

// Future Callback Four
typealias ValueFourCallbackFuture<V1, V2, V3, V4> = suspend (V1, V2, V3, V4) -> Unit

// Future Callback Four T
typealias ValueFourCallbackFutureT<T, V1, V2, V3, V4> = suspend (V1, V2, V3, V4) -> T
